package app.fichajes.utils;

import java.util.List;

import com.gi.libraryutility.main.ActivityUtility;

import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import app.fichajes.constants.Constants;
import app.fichajes.main.Main;
import app.fichajes.main.R;
import app.fichajes.views.AltasYBajas;
import app.fichajes.views.EquiposGrid;
import app.fichajes.views.Noticias;
import app.fichajes.views.Portada;


public class ChangeViews {
	
	public static View vistaActual;
	public static TextView info = (TextView)ActivityUtility.getActivityActual().findViewById(R.id.textViewInfo);
	
	public static void cambiaInclude(String s){
		
		
		seleccionaSeccion(s);
		
		View vistaActual = Constants.mapVistas.get(s);
		if(vistaActual != null){
			for(View vTemp: Constants.mapVistas.values()){
				if(vTemp != null)
					vTemp.setVisibility(View.GONE);
			}
			vistaActual.setVisibility(View.VISIBLE);
			vistaActual.bringToFront();
			
			actualizaVista(vistaActual);
			info.setText(s);
		}
		
	}
	
	/** Este método lo usamos para tener actualizada la view en la que estamos (para saber el include
	 * en el que estamos) por si tenemos que usarla, por ejemplo, actualmente se usa para los botones de las
	 * alertas de futbol (television y alertas) ya que es el mismo elemento usado en 3 includes distintos y 
	 * debe diferenciar uno de otro para que puedan funcionar en los 3 */
	private static void actualizaVista(View v){
		vistaActual = v;
	}
	
	private static void seleccionaSeccion(String s){
		
		String primero = Constants.pilaNavegacion.peek();
		/* Hacemos esto para que cuando se pulse varias veces en el mismo botón 
		 * no se metan estados repetidos en la pila de navegación
		 */
		if(!s.equals(primero)){
			Constants.pilaNavegacion.push(s);
		}
		
		setMenuButton(s);
		
		if(s.equals(Constants.VIEW_PORTADA))
			Portada.init();
		else if(s.equals(Constants.VIEW_GRID_EQUIPOS))
			EquiposGrid.init();
		else if(s.equals(Constants.VIEW_ALTAS_BAJAS))
			AltasYBajas.init();
		else if(s.equals(Constants.VIEW_NOTICIAS))
			Noticias.init();
		else
			Log.d("ChangeViews"," O_o oh fuck! ");
		
	}

	//Ofuscacion de codigo genial xD, realmente cambia el boton segun la seccion,
	//consultar la estructura del map para mejor comprension
	private static void setMenuButton(String seccion) {

		if(!seccion.equals("0")){
			
					for(String sec : Main.mapButtonState.keySet()){
				
				List<Object> l = Main.mapButtonState.get(sec);
				LinearLayout layout= (LinearLayout) l.get(0);
				layout.getChildAt(0).setBackgroundResource((Integer)l.get(2));
				
			}
			List<Object> l = Main.mapButtonState.get(seccion);
			LinearLayout layout= (LinearLayout) l.get(0);
			layout.getChildAt(0).setBackgroundResource((Integer)l.get(1));
		}
	}
}
